home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / communication / bbs / termv4.6 / extras / source / term-source.lha / ScreenPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-18  |  34.0 KB  |  1,336 lines

  1. /*
  2. **    ScreenPanel.c
  3. **
  4. **    Editing panel for screen configuration
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #ifndef _GLOBAL_H
  11. #include "Global.h"
  12. #endif
  13.  
  14. enum    {    GAD_SCREENMODE=1000,GAD_USE_PUBSCREEN,GAD_PUBSCREENNAME,GAD_FONT,
  15.         GAD_COLOURMODE,GAD_SCREENTITLE,GAD_MAKESCREENPUBLIC,GAD_SHANGHAI,
  16.         GAD_BLINKING,GAD_PALETTE,GAD_RED,GAD_GREEN,GAD_BLUE,GAD_RESET,
  17.         GAD_STDPENS,GAD_EDITPENS,GAD_WINDOW_BORDER,GAD_SPLIT_STATUS,
  18.         GAD_STATUS_LINE,GAD_PAGER,GAD_PAGEGROUP,
  19.  
  20.         GAD_USE,GAD_CANCEL,GAD_DEFAULT };
  21.  
  22.     /* CannotChangeColours(struct Configuration *LocalConfig,LONG OriginalColourMode):
  23.      *
  24.      *    This routine rolls the dice and determines whether the user should
  25.      *    be allowed to change the screen colours or rendering pens.
  26.      */
  27.  
  28. STATIC BOOL
  29. CannotChangeColours(struct Configuration *LocalConfig,LONG OriginalColourMode)
  30. {
  31.     if(LocalConfig -> ScreenConfig -> ColourMode == OriginalColourMode && !LocalConfig -> ScreenConfig -> UseWorkbench && LocalConfig -> ScreenConfig -> ColourMode == Config -> ScreenConfig -> ColourMode && Screen)
  32.     {
  33.         LONG ThisDepth,RequestedDepth;
  34.  
  35.         ThisDepth = GetBitMapDepth(Window -> WScreen -> RastPort . BitMap);
  36.  
  37.         switch(LocalConfig -> ScreenConfig -> ColourMode)
  38.         {
  39.             case COLOUR_AMIGA:
  40.  
  41.                 RequestedDepth = 2;
  42.                 break;
  43.  
  44.             case COLOUR_EIGHT:
  45.  
  46.                 RequestedDepth = 3;
  47.                 break;
  48.  
  49.             case COLOUR_SIXTEEN:
  50.  
  51.                 RequestedDepth = 4;
  52.                 break;
  53.  
  54.             case COLOUR_MONO:
  55.  
  56.                 RequestedDepth = 1;
  57.                 break;
  58.         }
  59.  
  60.         return((BOOL)(ThisDepth < RequestedDepth));
  61.     }
  62.     else
  63.         return(TRUE);
  64. }
  65.  
  66. STATIC BOOL
  67. ScreenPenPanel(struct Window *Window,UWORD *Array,UWORD *DefaultArray,LONG Depth)
  68. {
  69.     struct LayoutHandle    *Handle;
  70.     UWORD             PrivateArray[16];
  71.     BOOL             Result = FALSE;
  72.  
  73.     CopyMem(Array,PrivateArray,sizeof(PrivateArray));
  74.  
  75.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  76.         LH_LocaleHook,    &LocaleHook,
  77.         LH_ExactClone,    TRUE,
  78.     TAG_DONE))
  79.     {
  80.         struct Window *PanelWindow;
  81.  
  82.         LT_New(Handle,
  83.             LA_Type,    VERTICAL_KIND,
  84.         TAG_DONE);
  85.         {
  86.             LT_New(Handle,
  87.                 LA_Type,    VERTICAL_KIND,
  88.                 LA_LabelID,    MSG_PENPANEL_DRAWING_PENS_TXT,
  89.             TAG_DONE);
  90.             {
  91.                 LT_New(Handle,
  92.                     LA_Type,    VERTICAL_KIND,
  93.                 TAG_DONE);
  94.                 {
  95.                     LT_New(Handle,
  96.                         LA_Type,        PALETTE_KIND,
  97.                         LA_LabelID,        MSG_PENPANEL_BACKGROUND_TXT,
  98.                         GTPA_Depth,        Depth,
  99.                         LAPA_SmallPalette,    TRUE,
  100.                         LA_UWORD,        &PrivateArray[BACKGROUNDPEN],
  101.                         LA_Chars,        15,
  102.                         LA_ID,            100 + BACKGROUNDPEN,
  103.                     TAG_DONE);
  104.  
  105.                     LT_New(Handle,
  106.                         LA_Type,        PALETTE_KIND,
  107.                         LA_LabelID,        MSG_PENPANEL_TEXT_TXT,
  108.                         GTPA_Depth,        Depth,
  109.                         LAPA_SmallPalette,    TRUE,
  110.                         LA_UWORD,        &PrivateArray[TEXTPEN],
  111.                         LA_ID,            100 + TEXTPEN,
  112.                     TAG_DONE);
  113.  
  114.                     LT_New(Handle,
  115.                         LA_Type,        PALETTE_KIND,
  116.                         LA_LabelID,        MSG_PENPANEL_IMPORTANT_TEXT_TXT,
  117.                         GTPA_Depth,        Depth,
  118.                         LAPA_SmallPalette,    TRUE,
  119.                         LA_UWORD,        &PrivateArray[HIGHLIGHTTEXTPEN],
  120.                         LA_ID,            100 + HIGHLIGHTTEXTPEN,
  121.                     TAG_DONE);
  122.  
  123.                     LT_New(Handle,
  124.                         LA_Type,        PALETTE_KIND,
  125.                         LA_LabelID,        MSG_PENPANEL_BRIGHT_EDGES_TXT,
  126.                         GTPA_Depth,        Depth,
  127.                         LAPA_SmallPalette,    TRUE,
  128.                         LA_UWORD,        &PrivateArray[SHINEPEN],
  129.                         LA_ID,            100 + SHINEPEN,
  130.                     TAG_DONE);
  131.  
  132.                     LT_New(Handle,
  133.                         LA_Type,        PALETTE_KIND,
  134.                         LA_LabelID,        MSG_PENPANEL_DARK_EDGES_TXT,
  135.                         GTPA_Depth,        Depth,
  136.                         LAPA_SmallPalette,    TRUE,
  137.                         LA_UWORD,        &PrivateArray[SHADOWPEN],
  138.                         LA_ID,            100 + SHADOWPEN,
  139.                     TAG_DONE);
  140.  
  141.                     LT_New(Handle,
  142.                         LA_Type,        PALETTE_KIND,
  143.                         LA_LabelID,        MSG_PENPANEL_FILLPEN_TXT,
  144.                         GTPA_Depth,        Depth,
  145.                         LAPA_SmallPalette,    TRUE,
  146.                         LA_UWORD,        &PrivateArray[FILLPEN],
  147.                         LA_ID,            100 + FILLPEN,
  148.                     TAG_DONE);
  149.  
  150.                     LT_New(Handle,
  151.                         LA_Type,        PALETTE_KIND,
  152.                         LA_LabelID,        MSG_PENPANEL_FILLTEXTPEN_TXT,
  153.                         GTPA_Depth,        Depth,
  154.                         LAPA_SmallPalette,    TRUE,
  155.                         LA_UWORD,        &PrivateArray[FILLTEXTPEN],
  156.                         LA_ID,            100 + FILLTEXTPEN,
  157.                     TAG_DONE);
  158.  
  159.                     LT_New(Handle,
  160.                         LA_Type,        PALETTE_KIND,
  161.                         LA_LabelID,        MSG_PENPANEL_BARFILLPEN_TXT,
  162.                         GTPA_Depth,        Depth,
  163.                         LAPA_SmallPalette,    TRUE,
  164.                         LA_UWORD,        &PrivateArray[BARBLOCKPEN],
  165.                         LA_ID,            100 + BARBLOCKPEN,
  166.                     TAG_DONE);
  167.  
  168.                     LT_New(Handle,
  169.                         LA_Type,        PALETTE_KIND,
  170.                         LA_LabelID,        MSG_PENPANEL_BARTEXTPEN_TXT,
  171.                         GTPA_Depth,        Depth,
  172.                         LAPA_SmallPalette,    TRUE,
  173.                         LA_UWORD,        &PrivateArray[BARDETAILPEN],
  174.                         LA_ID,            100 + BARDETAILPEN,
  175.                     TAG_DONE);
  176.  
  177.                     LT_EndGroup(Handle);
  178.                 }
  179.  
  180.                 LT_New(Handle,
  181.                     LA_Type,XBAR_KIND,
  182.                 TAG_DONE);
  183.  
  184.                 LT_New(Handle,
  185.                     LA_Type,    VERTICAL_KIND,
  186.                 TAG_DONE);
  187.                 {
  188.                     LT_New(Handle,
  189.                         LA_Type,    BUTTON_KIND,
  190.                         LA_LabelID,    MSG_PENPANEL_STANDARDPENS_TXT,
  191.                         LA_ID,        GAD_DEFAULT,
  192.                         LABT_ExtraFat,    TRUE,
  193.                     TAG_DONE);
  194.  
  195.                     LT_EndGroup(Handle);
  196.                 }
  197.  
  198.                 LT_EndGroup(Handle);
  199.             }
  200.  
  201.             LT_New(Handle,
  202.                 LA_Type,VERTICAL_KIND,
  203.             TAG_DONE);
  204.             {
  205.                 LT_New(Handle,
  206.                     LA_Type,    XBAR_KIND,
  207.                     LAXB_FullSize,    TRUE,
  208.                 TAG_DONE);
  209.  
  210.                 LT_EndGroup(Handle);
  211.             }
  212.  
  213.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  214.                 LAGR_SameSize,    TRUE,
  215.                 LAGR_Spread,    TRUE,
  216.             TAG_DONE);
  217.             {
  218.                 LT_New(Handle,
  219.                     LA_Type,    BUTTON_KIND,
  220.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  221.                     LA_ID,        GAD_USE,
  222.                     LABT_ReturnKey,    TRUE,
  223.                     LABT_ExtraFat,    TRUE,
  224.                 TAG_DONE);
  225.  
  226.                 LT_New(Handle,
  227.                     LA_Type,    BUTTON_KIND,
  228.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  229.                     LA_ID,        GAD_CANCEL,
  230.                     LABT_EscKey,    TRUE,
  231.                     LABT_ExtraFat,    TRUE,
  232.                 TAG_DONE);
  233.  
  234.                 LT_EndGroup(Handle);
  235.             }
  236.  
  237.             LT_EndGroup(Handle);
  238.         }
  239.  
  240.         if(PanelWindow = LT_Build(Handle,
  241.             LAWN_TitleID,        MSG_PENPANEL_SCREEN_DRAWING_PENS_TXT,
  242.             LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  243.             LAWN_HelpHook,        &GuideHook,
  244.             LAWN_Parent,        Window,
  245.             WA_DepthGadget,        TRUE,
  246.             WA_CloseGadget,        TRUE,
  247.             WA_DragBar,        TRUE,
  248.             WA_RMBTrap,        TRUE,
  249.             WA_Activate,        TRUE,
  250.             WA_SimpleRefresh,    TRUE,
  251.         TAG_DONE))
  252.         {
  253.             struct IntuiMessage    *Message;
  254.             BOOL             Done = FALSE;
  255.             ULONG             MsgClass;
  256.             struct Gadget        *MsgGadget;
  257.             LONG             i;
  258.  
  259.             PushWindow(PanelWindow);
  260.  
  261.             LT_ShowWindow(Handle,TRUE);
  262.  
  263.             GuideContext(CONTEXT_SCREEN);
  264.  
  265.             do
  266.             {
  267.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  268.                     break;
  269.  
  270.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  271.                 {
  272.                     MsgClass    = Message -> Class;
  273.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  274.  
  275.                     LT_ReplyIMsg(Message);
  276.  
  277.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  278.                         Done = TRUE;
  279.  
  280.                     if(MsgClass == IDCMP_GADGETUP)
  281.                     {
  282.                         switch(MsgGadget -> GadgetID)
  283.                         {
  284.                             case GAD_USE:
  285.  
  286.                                 CopyMem(PrivateArray,Array,sizeof(PrivateArray));
  287.  
  288.                                 Array[DETAILPEN]    = PrivateArray[BACKGROUNDPEN];
  289.                                 Array[BLOCKPEN]        = PrivateArray[SHADOWPEN];
  290.                                 Array[BARTRIMPEN]    = PrivateArray[BARDETAILPEN];
  291.  
  292.                                 Result = Done = TRUE;
  293.                                 break;
  294.  
  295.                             case GAD_CANCEL:
  296.  
  297.                                 Done = TRUE;
  298.                                 break;
  299.  
  300.                             case GAD_DEFAULT:
  301.  
  302.                                 for(i = TEXTPEN ; i <= BARBLOCKPEN ; i++)
  303.                                     LT_SetAttributes(Handle,100 + i,GTPA_Color,DefaultArray[i],TAG_DONE);
  304.  
  305.                                 break;
  306.                         }
  307.                     }
  308.                 }
  309.             }
  310.             while(!Done);
  311.  
  312.             PopWindow();
  313.         }
  314.  
  315.         LT_DeleteHandle(Handle);
  316.     }
  317.  
  318.     return(Result);
  319. }
  320.  
  321. BOOL
  322. ScreenPanel(struct Window *Parent,struct Configuration *LocalConfig)
  323. {
  324.     STATIC LONG PageTitleID[6] =
  325.     {
  326.         MSG_V36_0163,
  327.         MSG_V36_0164,
  328.         MSG_V36_0165,
  329.         MSG_V36_0166,
  330.         MSG_PENPANEL_DRAWING_PENS_TXT,
  331.         -1
  332.     };
  333.  
  334.     STATIC BYTE         InitialPage = 0;
  335.  
  336.     struct LayoutHandle    *Handle;
  337.     BOOL             UseIt = FALSE;
  338.     STRPTR             PageTitle[6];
  339.  
  340.     LocalizeStringTable(PageTitle,PageTitleID);
  341.  
  342.         // Make a backup of the current settings. We will modify only
  343.         // the backup
  344.  
  345.     SaveConfig(LocalConfig,PrivateConfig);
  346.  
  347.         // If the settings aren't yet patched up for 96 bit mode,
  348.         // do it now.
  349.  
  350.     if(!PrivateConfig -> ScreenConfig -> UseColours96)
  351.     {
  352.         Colour12x96(PrivateConfig -> ScreenConfig -> Colours,PrivateConfig -> ScreenConfig -> Colours96,16);
  353.  
  354.         PrivateConfig -> ScreenConfig -> UseColours96 = TRUE;
  355.     }
  356.  
  357.     if(Handle = LT_CreateHandleTags(Parent -> WScreen,
  358.         LH_LocaleHook,    &LocaleHook,
  359.         LH_ExactClone,    TRUE,
  360.         LH_ExitFlush,    FALSE,
  361.     TAG_DONE))
  362.     {
  363.         struct Window    *LocalWindow;
  364.         UBYTE         ModeName[DISPLAYNAMELEN + 1],
  365.                  FontName[MAX_FILENAME_LENGTH];
  366.         ULONG         DisplayMode;
  367.         BOOL         FixedColours = CannotChangeColours(PrivateConfig,LocalConfig -> ScreenConfig -> ColourMode);
  368.  
  369.             // Get the desired screen display mode
  370.  
  371.         DisplayMode = PrivateConfig -> ScreenConfig -> DisplayMode;
  372.  
  373.             // Is the requested screen display mode available on this machine?
  374.  
  375.         if(ModeNotAvailable(DisplayMode))
  376.         {
  377.             struct Screen *PubScreen = LockPubScreen(NULL);
  378.  
  379.                 // Lock the default public screen
  380.  
  381.             if(PubScreen)
  382.             {
  383.                 struct DimensionInfo DimensionInfo;
  384.  
  385.                     // Use the default display mode
  386.  
  387.                 DisplayMode = GetVPModeID(&PubScreen -> ViewPort);
  388.  
  389.                     // Get the default screen size for this display mode
  390.  
  391.                 if(GetDisplayInfoData(NULL,(APTR)&DimensionInfo,sizeof(struct DimensionInfo),DTAG_DIMS,DisplayMode))
  392.                 {
  393.                     LONG    Width    = DimensionInfo . TxtOScan . MaxX - DimensionInfo . TxtOScan . MinX + 1,
  394.                         Height    = DimensionInfo . TxtOScan . MaxY - DimensionInfo . TxtOScan . MinY + 1;
  395.  
  396.                         // If the screen is set to a specific size, override
  397.                         // these settings with defaults.
  398.  
  399.                     if(Width != PrivateConfig -> ScreenConfig -> DisplayWidth && PrivateConfig -> ScreenConfig -> DisplayWidth > 0)
  400.                         PrivateConfig -> ScreenConfig -> DisplayWidth = Width;
  401.  
  402.                     if(Height != PrivateConfig -> ScreenConfig -> DisplayHeight && PrivateConfig -> ScreenConfig -> DisplayHeight > 0)
  403.                         PrivateConfig -> ScreenConfig -> DisplayHeight = Height;
  404.                 }
  405.  
  406.                 UnlockPubScreen(NULL,PubScreen);
  407.             }
  408.             else
  409.                 DisplayMode = DEFAULT_MONITOR_ID | HIRES_KEY;    // Catch all...
  410.         }
  411.  
  412.             // The name of the display mode chosen
  413.  
  414.         strcpy(ModeName,GetModeName(DisplayMode));
  415.  
  416.         BuildFontName(FontName,PrivateConfig -> ScreenConfig -> FontName,PrivateConfig -> ScreenConfig -> FontHeight);
  417.  
  418.             // If we cannot change the colours, or would
  419.             // display the wrong colours when choosing the
  420.             // rendering pens, don't display the last
  421.             // two pages
  422.  
  423.         if(FixedColours)
  424.         {
  425.             if(InitialPage > 2)
  426.                 InitialPage = 2;
  427.  
  428.             PageTitle[3] = NULL;
  429.         }
  430.  
  431.         if(!Kick30)
  432.         {
  433.             if(InitialPage > 3)
  434.                 InitialPage = 3;
  435.  
  436.             PageTitle[4] = NULL;
  437.         }
  438.  
  439.         LT_New(Handle,
  440.             LA_Type,    VERTICAL_KIND,
  441.         TAG_DONE);
  442.         {
  443.             LT_New(Handle,
  444.                 LA_Type,VERTICAL_KIND,
  445.             TAG_DONE);
  446.             {
  447.                 LT_New(Handle,
  448.                     LA_Type,    TAB_KIND,
  449.                     LA_ID,        GAD_PAGER,
  450.                     LA_LabelID,    MSG_XFER_PAGE_TXT,
  451.                     GTCY_Labels,    PageTitle,
  452.                     LACY_AutoPageID,GAD_PAGEGROUP,
  453.                     LACY_TabKey,    TRUE,
  454.                     LA_BYTE,    &InitialPage,
  455.                     LATB_FullWidth,    TRUE,
  456.                 TAG_DONE);
  457.  
  458.                 LT_EndGroup(Handle);
  459.             }
  460.  
  461.             LT_New(Handle,
  462.                 LA_Type,    VERTICAL_KIND,
  463.                 LA_ID,        GAD_PAGEGROUP,
  464.                 LAGR_ActivePage,InitialPage,
  465.             TAG_DONE);
  466.             {
  467.                 LT_New(Handle,
  468.                     LA_Type,    VERTICAL_KIND,
  469.                 TAG_DONE);
  470.                 {
  471.                     LT_New(Handle,
  472.                         LA_Type,    VERTICAL_KIND,
  473.                     TAG_DONE);
  474.                     {
  475.                         LT_New(Handle,
  476.                             LA_Type,    TEXT_KIND,
  477.                             LA_LabelID,    MSG_SCREENPANEL_CURRENT_DISPLAY_MODE_GAD,
  478.                             LA_Chars,    DISPLAYNAMELEN,
  479.                             LA_ID,        GAD_SCREENMODE,
  480.                             GTTX_Text,    ModeName,
  481.                             GTTX_Border,    TRUE,
  482.                             LATX_Picker,    TRUE,
  483.                             LATX_LockSize,    TRUE,
  484.                         TAG_DONE);
  485.  
  486.                         LT_New(Handle,
  487.                             LA_Type,    TEXT_KIND,
  488.                             LA_LabelID,    MSG_SCREENPANEL_SCREEN_FONT_GAD,
  489.                             LA_ID,        GAD_FONT,
  490.                             LA_Chars,    DISPLAYNAMELEN,
  491.                             GTTX_Text,    FontName,
  492.                             GTTX_Border,    TRUE,
  493.                             LATX_Picker,    TRUE,
  494.                             LATX_LockSize,    TRUE,
  495.                         TAG_DONE);
  496.  
  497.                         LT_EndGroup(Handle);
  498.                     }
  499.  
  500.                     LT_New(Handle,
  501.                         LA_Type,    VERTICAL_KIND,
  502.                     TAG_DONE);
  503.                     {
  504.                         if(Kick30)
  505.                         {
  506.                             LT_New(Handle,
  507.                                 LA_Type,    CHECKBOX_KIND,
  508.                                 LA_LabelID,    MSG_SCREENPANEL_FASTER_LAYOUT_GAD,
  509.                                 LA_BYTE,    &PrivateConfig -> ScreenConfig -> FasterLayout,
  510.                             TAG_DONE);
  511.                         }
  512.  
  513.                         LT_New(Handle,
  514.                             LA_Type,    CHECKBOX_KIND,
  515.                             LA_LabelID,    MSG_SCREENPANEL_MAKE_SCREEN_PUBLIC_GAD,
  516.                             LA_BYTE,    &PrivateConfig -> ScreenConfig -> MakeScreenPublic,
  517.                             LA_ID,        GAD_MAKESCREENPUBLIC,
  518.                             GA_Disabled,    PrivateConfig -> ScreenConfig -> UseWorkbench,
  519.                         TAG_DONE);
  520.  
  521.                         LT_New(Handle,
  522.                             LA_Type,    CHECKBOX_KIND,
  523.                             LA_ID,        GAD_SHANGHAI,
  524.                             LA_LabelID,    MSG_SCREENPANEL_SHANGHAI_WINDOWS_GAD,
  525.                             LA_BYTE,    &PrivateConfig -> ScreenConfig -> ShanghaiWindows,
  526.                             GA_Disabled,    PrivateConfig -> ScreenConfig -> UseWorkbench,
  527.                         TAG_DONE);
  528.  
  529.                         LT_EndGroup(Handle);
  530.                     }
  531.  
  532.                     LT_New(Handle,
  533.                         LA_Type,    VERTICAL_KIND,
  534.                     TAG_DONE);
  535.                     {
  536.                         LT_New(Handle,
  537.                             LA_Type,    XBAR_KIND,
  538.                         TAG_DONE);
  539.  
  540.                         LT_New(Handle,
  541.                             LA_Type,    CHECKBOX_KIND,
  542.                             LA_ID,        GAD_USE_PUBSCREEN,
  543.                             LA_LabelID,    MSG_SCREENPANEL_USE_WORKBENCH_GAD,
  544.                             LA_BYTE,    &PrivateConfig -> ScreenConfig -> UseWorkbench,
  545.                         TAG_DONE);
  546.  
  547.                         LT_EndGroup(Handle);
  548.                     }
  549.  
  550.                     LT_New(Handle,
  551.                         LA_Type,    VERTICAL_KIND,
  552.                     TAG_DONE);
  553.                     {
  554.                         LT_New(Handle,
  555.                             LA_Type,    STRING_KIND,
  556.                             LA_LabelID,    MSG_SCREENPANEL_PUBSCREEN_NAME_GAD,
  557.                             LA_ID,        GAD_PUBSCREENNAME,
  558.                             LA_STRPTR,    PrivateConfig -> ScreenConfig -> PubScreenName,
  559.                             LA_Chars,    14,
  560.                             GTST_MaxChars,    MAXPUBSCREENNAME,
  561.                             LAST_Picker,    TRUE,
  562.                             GA_Disabled,    !PrivateConfig -> ScreenConfig -> UseWorkbench,
  563.                         TAG_DONE);
  564.  
  565.                         LT_EndGroup(Handle);
  566.                     }
  567.  
  568.                     LT_EndGroup(Handle);
  569.                 }
  570.  
  571.                 LT_New(Handle,
  572.                     LA_Type,    VERTICAL_KIND,
  573.                 TAG_DONE);
  574.                 {
  575.                     LT_New(Handle,
  576.                         LA_Type,    VERTICAL_KIND,
  577.                     TAG_DONE);
  578.                     {
  579.                         LT_New(Handle,
  580.                             LA_Type,    CHECKBOX_KIND,
  581.                             LA_LabelID,    MSG_SCREENPANEL_SCREEN_TITLE_GAD,
  582.                             LA_BYTE,    &PrivateConfig -> ScreenConfig -> TitleBar,
  583.                             LA_ID,        GAD_SCREENTITLE,
  584.                             GA_Disabled,    PrivateConfig -> ScreenConfig -> UseWorkbench,
  585.                         TAG_DONE);
  586.  
  587.                         LT_New(Handle,
  588.                             LA_Type,    CHECKBOX_KIND,
  589.                             LA_LabelID,    MSG_SCREENPANEL_WINDOW_BORDER_TXT,
  590.                             LA_BYTE,    &PrivateConfig -> ScreenConfig -> ShareScreen,
  591.                             LA_ID,        GAD_WINDOW_BORDER,
  592.                             GA_Disabled,    PrivateConfig -> ScreenConfig -> UseWorkbench,
  593.                         TAG_DONE);
  594.  
  595.                         LT_New(Handle,
  596.                             LA_Type,    XBAR_KIND,
  597.                         TAG_DONE);
  598.  
  599.                         PrivateConfig -> ScreenConfig -> StatusLine &= 0xF;
  600.  
  601.                         LT_New(Handle,
  602.                             LA_Type,    CHECKBOX_KIND,
  603.                             LA_LabelID,    MSG_SCREENPANEL_SEPARATE_STATUS_WINDOW_TXT,
  604.                             LA_BYTE,    &PrivateConfig -> ScreenConfig -> SplitStatus,
  605.                             LA_ID,        GAD_SPLIT_STATUS,
  606.                             GA_Disabled,    !PrivateConfig -> ScreenConfig -> StatusLine || (!PrivateConfig -> ScreenConfig -> ShareScreen && !PrivateConfig -> ScreenConfig -> UseWorkbench),
  607.                         TAG_DONE);
  608.  
  609.                         LT_EndGroup(Handle);
  610.                     }
  611.  
  612.                     LT_New(Handle,
  613.                         LA_Type,    VERTICAL_KIND,
  614.                     TAG_DONE);
  615.                     {
  616.                         LT_New(Handle,
  617.                             LA_Type,    CYCLE_KIND,
  618.                             LA_LabelID,    MSG_SCREENPANEL_STATUS_LINE_GAD,
  619.                             LA_BYTE,    &PrivateConfig -> ScreenConfig -> StatusLine,
  620.                             LACY_FirstLabel,MSG_SCREENPANEL_STATUS_DISABLED_TXT,
  621.                             LACY_LastLabel,    MSG_SCREENPANEL_STATUS_COMPACT_TXT,
  622.                             LA_ID,        GAD_STATUS_LINE,
  623.                         TAG_DONE);
  624.  
  625.                         LT_New(Handle,
  626.                             LA_Type,    CYCLE_KIND,
  627.                             LA_LabelID,    MSG_SCREENPANEL_ONLINE_TIME_GAD,
  628.                             LA_BYTE,    &PrivateConfig -> ScreenConfig -> TimeMode,
  629.                             LACY_FirstLabel,MSG_SCREENPANEL_TIME_ONLINETIME_TXT,
  630.                             LACY_LastLabel,    MSG_SCREENPANEL_TIME_BOTH_TXT,
  631.                         TAG_DONE);
  632.  
  633.                         LT_EndGroup(Handle);
  634.                     }
  635.  
  636.                     LT_EndGroup(Handle);
  637.                 }
  638.  
  639.                 LT_New(Handle,
  640.                     LA_Type,    VERTICAL_KIND,
  641.                 TAG_DONE);
  642.                 {
  643.                     LT_New(Handle,
  644.                         LA_Type,    MX_KIND,
  645.                         LA_LabelID,    MSG_SCREENPANEL_COLOUR_GAD,
  646.                         LA_WORD,    &PrivateConfig -> ScreenConfig -> ColourMode,
  647.                         LA_ID,        GAD_COLOURMODE,
  648.                         LAMX_FirstLabel,MSG_SCREENPANEL_COLOUR_AMIGA_TXT,
  649.                         LAMX_LastLabel,    MSG_SCREENPANEL_COLOUR_MONO_TXT,
  650.                     TAG_DONE);
  651.  
  652.                     LT_New(Handle,
  653.                         LA_Type,    CHECKBOX_KIND,
  654.                         LA_LabelID,    MSG_SCREENPANEL_BLINKING_GAD,
  655.                         LA_ID,        GAD_BLINKING,
  656.                         LA_BYTE,    &PrivateConfig -> ScreenConfig -> Blinking,
  657.                         GA_Disabled,    PrivateConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,
  658.                         LA_ExtraSpace,    TRUE,
  659.                     TAG_DONE);
  660.  
  661.                     LT_EndGroup(Handle);
  662.                 }
  663.  
  664.                 if(!FixedColours)
  665.                 {
  666.                     LT_New(Handle,
  667.                         LA_Type,    VERTICAL_KIND,
  668.                     TAG_DONE);
  669.                     {
  670.                         LONG Depth;
  671.  
  672.                         switch(PrivateConfig -> ScreenConfig -> ColourMode)
  673.                         {
  674.                             case COLOUR_MONO:
  675.  
  676.                                 Depth = 1;
  677.                                 break;
  678.  
  679.                             case COLOUR_AMIGA:
  680.  
  681.                                 Depth = 2;
  682.                                 break;
  683.  
  684.                             case COLOUR_EIGHT:
  685.  
  686.                                 Depth = 3;
  687.                                 break;
  688.  
  689.                             case COLOUR_SIXTEEN:
  690.  
  691.                                 Depth = 4;
  692.                                 break;
  693.                         }
  694.  
  695.                         if(PrivateConfig -> ScreenConfig -> UseWorkbench)
  696.                         {
  697.                             LONG i,MaxDepth = 4;
  698.  
  699.                             for(i = 0 ; i < 4 ; i++)
  700.                             {
  701.                                 if((1L << i) > Window -> WScreen -> ViewPort . ColorMap -> Count)
  702.                                 {
  703.                                     MaxDepth = i;
  704.  
  705.                                     break;
  706.                                 }
  707.                             }
  708.  
  709.                             if(Depth > MaxDepth)
  710.                                 Depth = MaxDepth;
  711.                         }
  712.  
  713.                         LT_New(Handle,
  714.                             LA_Type,    VERTICAL_KIND,
  715.                         TAG_DONE);
  716.                         {
  717.                             LONG    ColourMax;
  718.                             STRPTR    ColourFormat;
  719.  
  720.                             if(Kick30)
  721.                             {
  722.                                 ColourMax    = 255;
  723.                                 ColourFormat    = "%3ld";
  724.                             }
  725.                             else
  726.                             {
  727.                                 ColourMax    = 15;
  728.                                 ColourFormat    = "%2ld";
  729.                             }
  730.  
  731.                             LT_New(Handle,
  732.                                 LA_Type,    PALETTE_KIND,
  733.                                 LA_LabelID,    MSG_SCREENPANEL_EDIT_SCREEN_PALETTE_GAD,
  734.                                 LA_ID,        GAD_PALETTE,
  735.                                 LA_Chars,    12,
  736.                                 GTPA_Depth,    Depth,
  737.                             TAG_DONE);
  738.  
  739.                             LT_New(Handle,
  740.                                 LA_Type,        SliderType,
  741.                                 LA_LabelID,        MSG_SCREENPANEL_RED_GAD,
  742.                                 LA_ID,            GAD_RED,
  743.                                 GTSL_Min,        0,
  744.                                 GTSL_Max,        ColourMax,
  745.                                 GTSL_Level,        0,
  746.                                 GTSL_LevelFormat,    ColourFormat,
  747.                             TAG_DONE);
  748.  
  749.                             LT_New(Handle,
  750.                                 LA_Type,        SliderType,
  751.                                 LA_LabelID,        MSG_SCREENPANEL_GREEN_GAD,
  752.                                 LA_ID,            GAD_GREEN,
  753.                                 GTSL_Min,        0,
  754.                                 GTSL_Max,        ColourMax,
  755.                                 GTSL_Level,        0,
  756.                                 GTSL_LevelFormat,    ColourFormat,
  757.                             TAG_DONE);
  758.  
  759.                             LT_New(Handle,
  760.                                 LA_Type,        SliderType,
  761.                                 LA_LabelID,        MSG_SCREENPANEL_BLUE_GAD,
  762.                                 LA_ID,            GAD_BLUE,
  763.                                 GTSL_Min,        0,
  764.                                 GTSL_Max,        ColourMax,
  765.                                 GTSL_Level,        0,
  766.                                 GTSL_LevelFormat,    ColourFormat,
  767.                             TAG_DONE);
  768.  
  769.                             LT_New(Handle,
  770.                                 LA_Type,        XBAR_KIND,
  771.                             TAG_DONE);
  772.  
  773.                             LT_EndGroup(Handle);
  774.                         }
  775.  
  776.                         LT_New(Handle,
  777.                             LA_Type,    VERTICAL_KIND,
  778.                         TAG_DONE);
  779.                         {
  780.                             LT_New(Handle,
  781.                                 LA_Type,    BUTTON_KIND,
  782.                                 LA_LabelID,    MSG_SCREENPANEL_USE_DEFAULT_TXT,
  783.                                 LA_ID,        GAD_RESET,
  784.                                 LA_Chars,    16,
  785.                             TAG_DONE);
  786.  
  787.                             LT_EndGroup(Handle);
  788.                         }
  789.  
  790.                         LT_EndGroup(Handle);
  791.                     }
  792.  
  793.                     if(Kick30)
  794.                     {
  795.                         LT_New(Handle,
  796.                             LA_Type,    VERTICAL_KIND,
  797.                         TAG_DONE);
  798.                         {
  799.                             LT_New(Handle,
  800.                                 LA_Type,    VERTICAL_KIND,
  801.                             TAG_DONE);
  802.                             {
  803.                                 LT_New(Handle,
  804.                                     LA_Type,    CHECKBOX_KIND,
  805.                                     LA_LabelID,    MSG_PENPANEL_STANDARDPENS_TXT,
  806.                                     LA_ID,        GAD_STDPENS,
  807.                                     LA_BYTE,    &PrivateConfig -> ScreenConfig -> UsePens,
  808.                                     GA_Disabled,    PrivateConfig -> ScreenConfig -> UseWorkbench,
  809.                                 TAG_DONE);
  810.  
  811.                                 LT_EndGroup(Handle);
  812.                             }
  813.  
  814.                             LT_New(Handle,
  815.                                 LA_Type,    VERTICAL_KIND,
  816.                             TAG_DONE);
  817.                             {
  818.                                 LT_New(Handle,
  819.                                     LA_Type,    BUTTON_KIND,
  820.                                     LA_LabelID,    MSG_PENPANEL_EDITPENS_TXT,
  821.                                     LA_ID,        GAD_EDITPENS,
  822.                                     GA_Disabled,    PrivateConfig -> ScreenConfig -> UsePens || PrivateConfig -> ScreenConfig -> UseWorkbench,
  823.                                 TAG_DONE);
  824.  
  825.                                 LT_EndGroup(Handle);
  826.                             }
  827.  
  828.                             LT_EndGroup(Handle);
  829.                         }
  830.                     }
  831.                 }
  832.  
  833.                 LT_EndGroup(Handle);
  834.             }
  835.  
  836.             LT_New(Handle,
  837.                 LA_Type,    VERTICAL_KIND,
  838.             TAG_DONE);
  839.             {
  840.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  841.  
  842.                 LT_EndGroup(Handle);
  843.             }
  844.  
  845.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  846.                 LAGR_SameSize,    TRUE,
  847.                 LAGR_Spread,    TRUE,
  848.             TAG_DONE);
  849.             {
  850.                 LT_New(Handle,
  851.                     LA_Type,    BUTTON_KIND,
  852.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  853.                     LA_ID,        GAD_USE,
  854.                     LABT_ReturnKey,    TRUE,
  855.                     LABT_ExtraFat,    TRUE,
  856.                 TAG_DONE);
  857.  
  858.                 LT_New(Handle,
  859.                     LA_Type,    BUTTON_KIND,
  860.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  861.                     LA_ID,        GAD_CANCEL,
  862.                     LABT_EscKey,    TRUE,
  863.                     LABT_ExtraFat,    TRUE,
  864.                 TAG_DONE);
  865.  
  866.                 LT_EndGroup(Handle);
  867.             }
  868.  
  869.             LT_EndGroup(Handle);
  870.         }
  871.  
  872.         if(LocalWindow = LT_Build(Handle,
  873.             LAWN_TitleID,        MSG_SCREENPANEL_SCREEN_PREFERENCES_TXT,
  874.             LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  875.             LAWN_HelpHook,        &GuideHook,
  876.             LAWN_Parent,        Parent,
  877.             WA_DepthGadget,        TRUE,
  878.             WA_CloseGadget,        TRUE,
  879.             WA_DragBar,        TRUE,
  880.             WA_RMBTrap,        TRUE,
  881.             WA_Activate,        TRUE,
  882.             WA_SimpleRefresh,    TRUE,
  883.         TAG_DONE))
  884.         {
  885.             struct IntuiMessage    *Message;
  886.             BOOL             Done = FALSE;
  887.             ULONG             MsgClass;
  888.             UWORD             MsgCode;
  889.             struct Gadget        *MsgGadget;
  890.  
  891.             LONG             ColourNumber = 0,Count,i;
  892.             WORD             Red,Green,Blue;
  893.             struct ViewPort        *LocalVPort = &LocalWindow -> WScreen -> ViewPort;
  894.             UWORD            *DefaultPens;
  895.             LONG             Depth;
  896.  
  897.             switch(PrivateConfig -> ScreenConfig -> ColourMode)
  898.             {
  899.                 case COLOUR_MONO:
  900.  
  901.                     DefaultPens = MonoPens;
  902.                     Depth = 1;
  903.                     break;
  904.  
  905.                 case COLOUR_AMIGA:
  906.  
  907.                     DefaultPens = StandardPens;
  908.                     Depth = 2;
  909.                     break;
  910.  
  911.                 case COLOUR_EIGHT:
  912.  
  913.                     DefaultPens = ANSIPens;
  914.                     Depth = 3;
  915.                     break;
  916.  
  917.                 case COLOUR_SIXTEEN:
  918.  
  919.                     if(Kick30)
  920.                         DefaultPens = NewEGAPens;
  921.                     else
  922.                         DefaultPens = EGAPens;
  923.  
  924.                     Depth = 4;
  925.                     break;
  926.             }
  927.  
  928.             for(Count = 0, i = DETAILPEN ; i <= BARTRIMPEN ; i++)
  929.             {
  930.                 if(PrivateConfig -> ScreenConfig -> PenArray[i])
  931.                     Count++;
  932.             }
  933.  
  934.             if(!Count)
  935.                 CopyMem(DefaultPens,PrivateConfig -> ScreenConfig -> PenArray,16 * sizeof(UWORD));
  936.  
  937.             PrivateConfig -> ScreenConfig -> DisplayMode = DisplayMode;
  938.  
  939.             if(!FixedColours)
  940.             {
  941.                 if(Kick30)
  942.                 {
  943.                     Red    = PrivateConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 0] >> 24;
  944.                     Green    = PrivateConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 1] >> 24;
  945.                     Blue    = PrivateConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 2] >> 24;
  946.                 }
  947.                 else
  948.                 {
  949.                     Red    = (PrivateConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  950.                     Green    = (PrivateConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  951.                     Blue    = (PrivateConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  952.                 }
  953.  
  954.                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  955.                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  956.                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  957.  
  958.                 PaletteSetup(PrivateConfig);
  959.  
  960.                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  961.                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  962.             }
  963.  
  964.             GuideContext(CONTEXT_SCREEN);
  965.  
  966.             PushWindow(LocalWindow);
  967.  
  968.             LT_ShowWindow(Handle,TRUE);
  969.  
  970.             do
  971.             {
  972.                 if(Wait(PORTMASK(LocalWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  973.                     break;
  974.  
  975.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  976.                 {
  977.                     MsgClass    = Message -> Class;
  978.                     MsgCode        = Message -> Code;
  979.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  980.  
  981.                     LT_ReplyIMsg(Message);
  982.  
  983.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  984.                         Done = TRUE;
  985.  
  986.                     if(MsgClass == IDCMP_GADGETUP || MsgClass == IDCMP_MOUSEMOVE || MsgClass == IDCMP_GADGETDOWN)
  987.                     {
  988.                         switch(MsgGadget -> GadgetID)
  989.                         {
  990.                             case GAD_RED:
  991.  
  992.                                 if(Kick30)
  993.                                     Red = MsgCode;
  994.                                 else
  995.                                     Red = (MsgCode << 4) | MsgCode;
  996.  
  997.                                 PrivateConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 0] = SPREAD(Red);
  998.  
  999.                                 PaletteSetup(PrivateConfig);
  1000.  
  1001.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1002.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1003.  
  1004.                                 break;
  1005.  
  1006.                             case GAD_GREEN:
  1007.  
  1008.                                 if(Kick30)
  1009.                                     Green = MsgCode;
  1010.                                 else
  1011.                                     Green = (MsgCode << 4) | MsgCode;
  1012.  
  1013.                                 PrivateConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 1] = SPREAD(Green);
  1014.  
  1015.                                 PaletteSetup(PrivateConfig);
  1016.  
  1017.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1018.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1019.  
  1020.                                 break;
  1021.  
  1022.                             case GAD_BLUE:
  1023.  
  1024.                                 if(Kick30)
  1025.                                     Blue = MsgCode;
  1026.                                 else
  1027.                                     Blue = (MsgCode << 4) | MsgCode;
  1028.  
  1029.                                 PrivateConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 2] = SPREAD(Blue);
  1030.  
  1031.                                 PaletteSetup(PrivateConfig);
  1032.  
  1033.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1034.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1035.  
  1036.                                 break;
  1037.  
  1038.                             case GAD_STDPENS:
  1039.  
  1040.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1041.                                     GA_Disabled,PrivateConfig -> ScreenConfig -> UsePens || PrivateConfig -> ScreenConfig -> UseWorkbench || FixedColours,
  1042.                                 TAG_DONE);
  1043.  
  1044.                                 break;
  1045.  
  1046.                             case GAD_USE_PUBSCREEN:
  1047.  
  1048.                                 LT_SetAttributes(Handle,GAD_PUBSCREENNAME,    GA_Disabled,!PrivateConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1049.                                 LT_SetAttributes(Handle,GAD_MAKESCREENPUBLIC,    GA_Disabled,PrivateConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1050.                                 LT_SetAttributes(Handle,GAD_SHANGHAI,        GA_Disabled,PrivateConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1051.                                 LT_SetAttributes(Handle,GAD_SCREENTITLE,    GA_Disabled,PrivateConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1052.                                 LT_SetAttributes(Handle,GAD_WINDOW_BORDER,    GA_Disabled,PrivateConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1053.                                 LT_SetAttributes(Handle,GAD_BLINKING,        GA_Disabled,PrivateConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,TAG_DONE);
  1054.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,    GA_Disabled,!PrivateConfig -> ScreenConfig -> StatusLine || (!PrivateConfig -> ScreenConfig -> ShareScreen && !PrivateConfig -> ScreenConfig -> UseWorkbench),TAG_DONE);
  1055.  
  1056.                                 FixedColours = CannotChangeColours(PrivateConfig,LocalConfig -> ScreenConfig -> ColourMode);
  1057.  
  1058.                                 LT_SetAttributes(Handle,GAD_PALETTE,        GA_Disabled,FixedColours,TAG_DONE);
  1059.                                 LT_SetAttributes(Handle,GAD_RED,        GA_Disabled,FixedColours,TAG_DONE);
  1060.                                 LT_SetAttributes(Handle,GAD_GREEN,        GA_Disabled,FixedColours,TAG_DONE);
  1061.                                 LT_SetAttributes(Handle,GAD_BLUE,        GA_Disabled,FixedColours,TAG_DONE);
  1062.                                 LT_SetAttributes(Handle,GAD_RESET,        GA_Disabled,FixedColours,TAG_DONE);
  1063.  
  1064.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1065.                                     GA_Disabled,    PrivateConfig -> ScreenConfig -> UsePens || PrivateConfig -> ScreenConfig -> UseWorkbench || FixedColours,
  1066.                                 TAG_DONE);
  1067.  
  1068.                                 LT_SetAttributes(Handle,GAD_STDPENS,
  1069.                                     GTCB_Checked,    PrivateConfig -> ScreenConfig -> UsePens = TRUE,
  1070.                                     GA_Disabled,    PrivateConfig -> ScreenConfig -> UseWorkbench || FixedColours,
  1071.                                 TAG_DONE);
  1072.  
  1073.                                 break;
  1074.  
  1075.                             case GAD_WINDOW_BORDER:
  1076.  
  1077.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!PrivateConfig -> ScreenConfig -> StatusLine || (!PrivateConfig -> ScreenConfig -> ShareScreen && !PrivateConfig -> ScreenConfig -> UseWorkbench),TAG_DONE);
  1078.                                 break;
  1079.  
  1080.                             case GAD_COLOURMODE:
  1081.  
  1082.                                 if(!ModeOkay(PrivateConfig -> ScreenConfig -> DisplayMode) && PrivateConfig -> ScreenConfig -> ColourMode > COLOUR_AMIGA)
  1083.                                     LT_SetAttributes(Handle,GAD_COLOURMODE,GTCY_Active,COLOUR_AMIGA,TAG_DONE);
  1084.  
  1085.                                 FixedColours = CannotChangeColours(PrivateConfig,LocalConfig -> ScreenConfig -> ColourMode);
  1086.  
  1087.                                 LT_SetAttributes(Handle,GAD_PALETTE,    GA_Disabled,FixedColours,TAG_DONE);
  1088.                                 LT_SetAttributes(Handle,GAD_RED,    GA_Disabled,FixedColours,TAG_DONE);
  1089.                                 LT_SetAttributes(Handle,GAD_GREEN,    GA_Disabled,FixedColours,TAG_DONE);
  1090.                                 LT_SetAttributes(Handle,GAD_BLUE,    GA_Disabled,FixedColours,TAG_DONE);
  1091.                                 LT_SetAttributes(Handle,GAD_RESET,    GA_Disabled,FixedColours,TAG_DONE);
  1092.                                 LT_SetAttributes(Handle,GAD_BLINKING,    GA_Disabled,PrivateConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,TAG_DONE);
  1093.  
  1094.                                 switch(PrivateConfig -> ScreenConfig -> ColourMode)
  1095.                                 {
  1096.                                     case COLOUR_MONO:
  1097.  
  1098.                                         DefaultPens = MonoPens;
  1099.                                         Depth = 1;
  1100.                                         break;
  1101.  
  1102.                                     case COLOUR_AMIGA:
  1103.  
  1104.                                         DefaultPens = StandardPens;
  1105.                                         Depth = 2;
  1106.                                         break;
  1107.  
  1108.                                     case COLOUR_EIGHT:
  1109.  
  1110.                                         DefaultPens = ANSIPens;
  1111.                                         Depth = 3;
  1112.                                         break;
  1113.  
  1114.                                     case COLOUR_SIXTEEN:
  1115.  
  1116.                                         DefaultPens = EGAPens;
  1117.                                         Depth = 4;
  1118.                                         break;
  1119.                                 }
  1120.  
  1121.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1122.                                     GA_Disabled,    FixedColours,
  1123.                                 TAG_DONE);
  1124.  
  1125.                                 LT_SetAttributes(Handle,GAD_STDPENS,
  1126.                                     GA_Disabled,    FixedColours,
  1127.                                 TAG_DONE);
  1128.  
  1129.                                 Default2CurrentPalette(PrivateConfig);
  1130.  
  1131.                                 break;
  1132.  
  1133.                             case GAD_EDITPENS:
  1134.  
  1135.                                 LT_LockWindow(LocalWindow);
  1136.  
  1137.                                 if(PrivateConfig -> ScreenConfig -> PenColourMode != PrivateConfig -> ScreenConfig -> ColourMode)
  1138.                                 {
  1139.                                     UWORD LocalPens[16];
  1140.  
  1141.                                     CopyMem(DefaultPens,LocalPens,16 * sizeof(UWORD));
  1142.  
  1143.                                     if(ScreenPenPanel(LocalWindow,LocalPens,DefaultPens,Depth))
  1144.                                     {
  1145.                                         CopyMem(LocalPens,PrivateConfig -> ScreenConfig -> PenArray,16 * sizeof(UWORD));
  1146.  
  1147.                                         PrivateConfig -> ScreenConfig -> PenColourMode = PrivateConfig -> ScreenConfig -> ColourMode;
  1148.                                     }
  1149.                                 }
  1150.                                 else
  1151.                                     ScreenPenPanel(LocalWindow,PrivateConfig -> ScreenConfig -> PenArray,DefaultPens,Depth);
  1152.  
  1153.                                 LT_UnlockWindow(LocalWindow);
  1154.  
  1155.                                 LT_ShowWindow(Handle,TRUE);
  1156.                                 break;
  1157.  
  1158.                             case GAD_MAKESCREENPUBLIC:
  1159.  
  1160.                                 LT_SetAttributes(Handle,GAD_SHANGHAI,
  1161.                                     GA_Disabled,    !PrivateConfig -> ScreenConfig -> MakeScreenPublic || PrivateConfig -> ScreenConfig -> UseWorkbench,
  1162.                                 TAG_DONE);
  1163.  
  1164.                                 break;
  1165.  
  1166.                             case GAD_PALETTE:
  1167.  
  1168.                                 ColourNumber = MsgCode;
  1169.  
  1170.                                 if(Kick30)
  1171.                                 {
  1172.                                     Red    = PrivateConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 0] >> 24;
  1173.                                     Green    = PrivateConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 1] >> 24;
  1174.                                     Blue    = PrivateConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 2] >> 24;
  1175.                                 }
  1176.                                 else
  1177.                                 {
  1178.                                     Red    = (PrivateConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  1179.                                     Green    = (PrivateConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  1180.                                     Blue    = (PrivateConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  1181.                                 }
  1182.  
  1183.                                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1184.                                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1185.                                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1186.  
  1187.                                 break;
  1188.  
  1189.                             case GAD_RESET:
  1190.  
  1191.                                 Default2CurrentPalette(PrivateConfig);
  1192.  
  1193.                                 if(Kick30)
  1194.                                 {
  1195.                                     Red    = PrivateConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 0] >> 24;
  1196.                                     Green    = PrivateConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 1] >> 24;
  1197.                                     Blue    = PrivateConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 2] >> 24;
  1198.                                 }
  1199.                                 else
  1200.                                 {
  1201.                                     Red    = (PrivateConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  1202.                                     Green    = (PrivateConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  1203.                                     Blue    = (PrivateConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  1204.                                 }
  1205.  
  1206.                                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1207.                                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1208.                                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1209.  
  1210.                                 PaletteSetup(PrivateConfig);
  1211.  
  1212.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1213.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1214.  
  1215.                                 break;
  1216.  
  1217.                             case GAD_USE:
  1218.  
  1219.                                 LT_UpdateStrings(Handle);
  1220.  
  1221.                                 if(!FixedColours)
  1222.                                     PaletteSetup(PrivateConfig);
  1223.                                 else
  1224.                                 {
  1225.                                     if(PrivateConfig -> ScreenConfig -> ColourMode != PrivateConfig -> ScreenConfig -> ColourMode)
  1226.                                         Default2CurrentPalette(PrivateConfig);
  1227.                                 }
  1228.  
  1229.                                 if(PrivateConfig -> ScreenConfig -> PenColourMode != PrivateConfig -> ScreenConfig -> ColourMode)
  1230.                                 {
  1231.                                     CopyMem(DefaultPens,PrivateConfig -> ScreenConfig -> PenArray,16 * sizeof(UWORD));
  1232.  
  1233.                                     PrivateConfig -> ScreenConfig -> PenColourMode = PrivateConfig -> ScreenConfig -> ColourMode;
  1234.                                 }
  1235.  
  1236.                                 UseIt = Done = TRUE;
  1237.                                 break;
  1238.  
  1239.                             case GAD_CANCEL:
  1240.  
  1241.                                 Done = TRUE;
  1242.                                 break;
  1243.                         }
  1244.                     }
  1245.  
  1246.                     if(MsgClass == IDCMP_IDCMPUPDATE)
  1247.                     {
  1248.                         switch(MsgGadget -> GadgetID)
  1249.                         {
  1250.                             case GAD_FONT:
  1251.  
  1252.                                 if(PickFont(LocalWindow,PrivateConfig -> ScreenConfig -> FontName,&PrivateConfig -> ScreenConfig -> FontHeight,FALSE))
  1253.                                 {
  1254.                                     BuildFontName(FontName,PrivateConfig -> ScreenConfig -> FontName,PrivateConfig -> ScreenConfig -> FontHeight);
  1255.  
  1256.                                     LT_SetAttributes(Handle,GAD_FONT,
  1257.                                         GTTX_Text,    FontName,
  1258.                                     TAG_DONE);
  1259.                                 }
  1260.  
  1261.                                 break;
  1262.  
  1263.                             case GAD_SCREENMODE:
  1264.  
  1265.                                 LT_LockWindow(LocalWindow);
  1266.  
  1267.                                 if(PickDisplayMode(LocalWindow,&PrivateConfig -> ScreenConfig -> DisplayMode,PrivateConfig))
  1268.                                 {
  1269.                                     strcpy(ModeName,GetModeName(PrivateConfig -> ScreenConfig -> DisplayMode));
  1270.  
  1271.                                     LT_SetAttributes(Handle,GAD_SCREENMODE,GTTX_Text,ModeName,TAG_DONE);
  1272.                                 }
  1273.  
  1274.                                 LT_UnlockWindow(LocalWindow);
  1275.  
  1276.                                 LT_ShowWindow(Handle,TRUE);
  1277.  
  1278.                                 break;
  1279.  
  1280.                             case GAD_STATUS_LINE:
  1281.  
  1282.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!PrivateConfig -> ScreenConfig -> StatusLine || (!PrivateConfig -> ScreenConfig -> ShareScreen && !PrivateConfig -> ScreenConfig -> UseWorkbench),TAG_DONE);
  1283.  
  1284.                                 break;
  1285.  
  1286.                             case GAD_PUBSCREENNAME:
  1287.  
  1288.                                 if(PrivateConfig -> ScreenConfig -> UseWorkbench)
  1289.                                 {
  1290.                                     UBYTE DummyBuffer[MAXPUBSCREENNAME + 1];
  1291.  
  1292.                                     LT_LockWindow(LocalWindow);
  1293.  
  1294.                                     strcpy(DummyBuffer,(STRPTR)LT_GetAttributes(Handle,GAD_PUBSCREENNAME,TAG_DONE));
  1295.                                     strcpy(SharedBuffer,DummyBuffer);
  1296.  
  1297.                                     if(PickScreen(LocalWindow,DummyBuffer))
  1298.                                     {
  1299.                                         if(strcmp(DummyBuffer,SharedBuffer))
  1300.                                             LT_SetAttributes(Handle,GAD_PUBSCREENNAME,GTST_String,DummyBuffer,TAG_DONE);
  1301.                                     }
  1302.  
  1303.                                     LT_UnlockWindow(LocalWindow);
  1304.  
  1305.                                     LT_ShowWindow(Handle,TRUE);
  1306.                                 }
  1307.  
  1308.                                 break;
  1309.                         }
  1310.                     }
  1311.                 }
  1312.             }
  1313.             while(!Done);
  1314.  
  1315.             PopWindow();
  1316.  
  1317.             if(((UseIt && Config != LocalConfig) || (!UseIt && Config == LocalConfig)) && !Config -> ScreenConfig -> UseWorkbench && Screen)
  1318.             {
  1319.                 PaletteSetup(Config);
  1320.  
  1321.                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1322.                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1323.             }
  1324.         }
  1325.  
  1326.         LT_DeleteHandle(Handle);
  1327.     }
  1328.  
  1329.     if(UseIt)
  1330.         SwapConfig(LocalConfig,PrivateConfig);
  1331.     else
  1332.         SaveConfig(LocalConfig,PrivateConfig);
  1333.  
  1334.     return(UseIt);
  1335. }
  1336.